const uploader = new(require("../../library/qiniu-uploader.js"))(@options("qiniu") || {
    "accessKey": "KC5_GkZ13cMwwLD2Bp-Ju5PsDrAQrXoyL3fRn2Ep",
    "secretKey": "2NvJvonZtoNYvvEK0gykAqrZDdpHoVnx6vXqDHO1",
    "bucket": "mewchan",
    "domain": "https://static.mewchan.com"
});

module.exports = function(lab) {
    return {
        /*
            HD

            获取上传到七牛所需要的token
            key最后后面有文件后缀
         */
        "@getTokenToUpload": function(key) {
            return @.async.resolve({
                "token": uploader.getUploadToken(key),
                "key": key,
                "domain": uploader.domain,
                "region": "ECN"
            })
        },
        /*
            HD

            options
                path        为上传到七牛的指定url，为空自动为文件名添加uuid前缀并上传
         */
        "@uploadFile": function(file, options = {}) {
            return uploader.autoUpload(file, options)
        },
        /*
            HD

            options
                path        为上传到七牛的指定url，不能为空
                content     要上传到七牛的字符串，不能为空
                needCover   是否需要覆盖上传，不覆盖如果path有文件，则会有文件已存在的报错
         */
        "@stringUpload": function(options) {
            return uploader.stringUpload(options)
        },
        /*
            HD

            options
                path        为上传到七牛的指定url，不能为空
                stream      要上传到七牛的流，不能为空
                needCover   是否需要覆盖上传，不覆盖如果path有文件，则会有文件已存在的报错
         */
        "@streamUpload": function(options) {
            return uploader.streamUpload(options)
        },
        /*
            HD

            options
                path        为上传到七牛的指定url，不能为空
                buffer      要上传到七牛的buffer，不能为空
                needCover   是否需要覆盖上传，不覆盖如果path有文件，则会有文件已存在的报错
         */
        "@bufferUpload": function(options) {
            return uploader.bufferUpload(options)
        },
        /*
            HD

            urlsToRefresh为需要刷新文件的url数组

            返回值
            code            int             必须  自定义错误码，整型，见自定义状态码
            error           string          必须  自定义错误码描述，字符串
            requestId       string          可选  刷新请求id，只有在任务被接受时才有值
            invalidUrls     string array    可选  无效的url列表
            invalidDirs     string array    可选  无效的dir列表
            urlQuotaDay     int             可选  每日的刷新url限额
            urlSurplusDay   int             可选  每日的当前剩余的刷新url限额
            dirQuotaDay     int             可选  每日的刷新dir限额
            dirSurplusDay   int             可选  每日的当前剩余的刷新dir限额

            code
            200     success                         成功
            400031  invalid url                     请求中存在无效的 url，请确保 url 格式正确
            400032  invalid host                    请求中存在无效的域名，请确保域名格式正确
            400034  refresh url limit error         请求次数超出当日刷新限额
            400036  invalid request id              无效的请求 id
            400037  url has existed url             正在刷新中
            400038  refresh dir authority error     没有刷新目录的权限， 如果需要请联系技术支持
            500000  internal error                  服务端内部错误，请联系技术支持
         */
        "@refreshUrls": function(urlsToRefresh, needDomain) {
            if (!Array.isArray(urlsToRefresh)) {
                urlsToRefresh = [urlsToRefresh]
            }
            if (needDomain) {
                urlsToRefresh = urlsToRefresh.map(function(url) {
                    return uploader.domain + "/" + url
                })
            }
            return uploader.refreshUrls(urlsToRefresh)
        },
        "@stat": function(url, key) {
            return uploader.stat(url, key)
        },
        "@getEtag": function(buffer) {
            return uploader.getEtag(buffer)
        },
        "@getUrlFromPublicBucket": function(key) {
            return @.async.resolve(uploader.getUrlFromPublicBucket("", key))
        }
    }
}